/*
 * cantttimebaritem.h
 * 甘特图时间条项头文件
 * 定义了甘特图中的时间条项类，负责显示计划和实际时间条以及相关事件
 */
#ifndef CANTTTIMEBARITEM_H
#define CANTTTIMEBARITEM_H

#include <QGraphicsRectItem>
#include <QDateTime>
#include "definition.h"

/**
 * @class CanttTimeBarItem
 * @brief 甘特图时间条项类
 * @details 继承自QGraphicsRectItem，负责在甘特图中显示时间条，
 *          支持计划时间和实际时间两种类型，以及添加各种事件标记
 */
class CanttTimeBarItem : public QGraphicsRectItem
{
public:
    enum {Type = canttTimeBarType};

    /**
     * @brief 时间条类型枚举
     */
    enum TimeType {
        PlanTime,   ///< 计划时间条
        RealTime    ///< 实际时间条
    };

    /**
     * @brief 事件类型枚举
     */
    enum EventType {
        TakeoffEvent,          ///< 起飞事件
        RotationEvent,         ///< 转角事件
        SwitchChannelEvent,    ///< 切换频道事件
        LandEvent              ///< 降落事件
    };

    /**
     * @brief 构造函数
     * @param start 开始时间
     * @param end 结束时间
     * @param type 时间条类型
     * @param factor 时间与像素的转换因子
     */
    explicit CanttTimeBarItem(const QDateTime &start, const QDateTime &end, TimeType type, double factor);

    /**
     * @brief 添加事件到时间条
     * @param dateTime 事件发生时间
     * @param type 事件类型
     */
    void addEvent(const QDateTime &dateTime, EventType type);

private:
    /**
     * @brief 创建事件项
     * @param type 事件类型
     * @return 返回创建的事件图形项
     */
    QGraphicsItem *createEventItem(EventType type);

    /**
     * @brief 创建事件项2
     * @return 返回创建的事件图形项
     */
    QGraphicsItem *createEventItem2();

private:
    /**
     * @brief 时间与像素的转换因子
     */
    double m_pFactor;

    /**
     * @brief 开始时间
     */
    QDateTime m_startDateTime;

    /**
     * @brief 结束时间
     */
    QDateTime m_endDateTime;
};

#endif // CANTTTIMEBARITEM_H
